package sessions.abilitiesSession;

import java.util.ArrayList;

import javax.ejb.Local;

import entities.Ability;

@Local
public interface AbilitySessionLocal {

	/**
	 * restituisce tutte le abilita
	 * 
	 * @return tutte le abilita salvate nel DB
	 */
	public ArrayList<Ability> getAllAbilities();
	
	/**
	 * crea una nuova abilita
	 * 
	 * @param name
	 *            il nome della nuova abilita
	 * @param description
	 *            la descrizione della nuova abilita
	 * @return l'id dell'abilita creata
	 */
	public int inserAbility(String name, String description);
	
	/**
	 * restituisce tutte le abilita
	 * 
	 * @return tutte le abilita dell'utente salvate nel DB
	 */
	public ArrayList<Ability> getUserAbilities(int id);
	
	public boolean removeAbilityFromUser(int idAbility,int idUser);
	
	/**
	 * crea un suggerimento di una nuova abilita' nel DB
	 * 
	 * @param suggestedName
	 *            il nome suggerito per la nuova abilita'
	 * @param suggestedDescription
	 *            la descrizione suggerita per la nuova abilita'
	 * @return l'id della nuova richiesta
	 */
	public int insertAbilitySuggestion(String suggestedName,
			String suggestedDescription);
	
	/**
	 * controlla se un nome dell'abilita' e' gia' stato usato
	 * 
	 * @param suggestedName
	 *            il nome da controllare
	 * @param isSuggestedSearchInclude se e' true cerca anche tra i suggerimenti di abilita'
	 * @return false se il nome e' gia' usato, true altrimenti
	 */
	public boolean checkIfAbilityNameIsNew(String suggestedName,boolean isSuggestedSearchInclude);
	
	/**
	 * restituisce tutte le abilita
	 * 
	 * @return tutte le abilita richieste dagli utenti
	 */
	public ArrayList<Ability> getSuggestedAbilities();
	
	/**
	 * trasforma un suggerimento in una abilita' vera e propria
	 * @param idAbility l'id del suggerimento
	 * @param name il nome dell'abilita'
	 * @param description la descrizione dell'abilita'
	 * @return true se l'inserimento e' andato a buon fine
	 */
	public boolean acceptSuggest(int idAbility, String name, String description);
	
	public Ability getAbilityByName(String name);	
	/**
	 * cancella un suggerimento di abilita'
	 * @param idAbility l'id del suggerimento di abilita' da cancellare
	 * @return true se la cancellazione e' stata effettuata
	 */
	public boolean rejectSuggest(int idAbility);
	
	//elimina tutte le abilita di un utente
		public boolean eraseUserAbilities(int userId);
	
}
